package com.sicpa.system.mapper;

import com.sicpa.common.core.domain.entity.AssuranceBusinessDataReport;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * AssuranceBusinessDataReportMapper
 *
 * @author lwf
 */
public interface AssuranceBusinessDataReportMapper {

    /**
     * 新增鉴证业务报告
     *
     * @param assuranceBusinessDataReport
     * @return
     */
    int insertReport(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 删除鉴证业务数据报告列表
     *
     * @param businessId
     * @return
     */
    int deleteDeptByBusinessId(String[] businessId);

    /**
     * 修改鉴证业务报告
     *
     * @param assuranceBusinessDataReport
     * @return
     */
    int updateReport(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 修改鉴证业务报告，不累计次数
     * @param assuranceBusinessDataReport
     * @return
     */
    int updateReportNoCount(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 根据鉴证业务数据报告id获取详细信息
     *
     * @param businessId
     * @return
     */
    AssuranceBusinessDataReport selectReportByBusinessId(Long businessId);

    /**
     * 20201113，wym
     * 根据鉴证业务数据报告id集合，获取详细信息列表，按照报告文号（report_no）降序排序
     *
     * @param businessIds
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportListByBusinessIds(String[] businessIds);

    List<AssuranceBusinessDataReport> selectReportListByReportNo(@Param("reportNo") String reportNo,@Param("antiCounterfeitingCoding")String antiCounterfeitingCoding);

    /**
     * 根据事务所id，注册师获取业务报告
     * @param assuranceBusinessDataReport
     * @return
     */
  //  List<AssuranceBusinessDataReport> selectReportByOfficeAndRegistrant(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 根据鉴证业务数据报告id获取详细信息-- 无签字注册师
     * @param businessId
     * @return
     */
    AssuranceBusinessDataReport selectReportByBusinessIdFu(Long businessId);
    /**
     * 获取鉴证业务数据报告列表
     *
     * @param assuranceBusinessDataReport
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportList(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 20201105,wym，用报告文号clean，查询是否有路径2的数据，必要条件是 status = 1 and data_status != 4
     * status：0草稿，1确认状态，2删除
     * data_status：数据状态：0：不予报备，1：强审通过，2：数据异常，3：正常，4：作废，5：预上传，6：提交审核，7：审核通过，8：审核不通过,9：待确认
     * 获取鉴证业务数据报告列表
     *
     * @param reportNoClean
     * @return
     */
    List<AssuranceBusinessDataReport> selectImport2ReportList( @Param("reportNoClean") String reportNoClean);

  /*  *//**
     * 获取鉴证业务数据报告列表
     *
     * @param assuranceBusinessDataReport
     * @return
     *//*
    List<AssuranceBusinessDataReport> selectReportList2(AssuranceBusinessDataReport assuranceBusinessDataReport);
*/
    /**
     * 获取鉴证业务数据报告列表
     *
     * @param assuranceBusinessDataReport
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportListDraft(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 申请财政退回
     *
     * @param businessId
     * @return
     */
    int back(@Param("businessId") Long businessId,@Param("contrastStatus") String contrastStatus);

    /**
     * 财政退回通过/不通过
     *
     * @param businessId
     * @return
     */
    int backPassOrNoPass(@Param("businessId") Long businessId, @Param("applyForFinancialRefund") String applyForFinancialRefund);

    /**
     * wym，根据传递的事务所名称集合，查询数据库中包含哪些事务所以及这些事务所的id
     * @param firmNames
     * @return
     */
    List<HashMap<String,Object>> selectFirmNameIdsByNames(String[] firmNames);

    /**
     * wym，根据传递的事务所名称集合，查询数据库中包含哪些事务所
     *
     * @param firmNames
     * @return
     */
    List<String> selectFirmNamesByNames(String[] firmNames);

    /**
     * wym，根据传递的报备编码集合，查询数据库中已经存在了
     *
     * @param reportCodes
     * @return
     */
    List<String> selectReportCodesByCodes(String[] reportCodes);

    /**
     * 数据状态：0：不予报备，1：强审通过
     *
     * @param dataStatus
     * @param businessId
     * @return
     */
    int noFilingOrCompulsoryApproval(@Param("dataStatus") int dataStatus, @Param("businessId") Long businessId,@Param("strongReason") String strongReason);

    /**
     * 作废
     * @param businessId
     * @param voidReason
     * @return
     */
    int voidBusinessData(@Param("businessId") Long businessId,@Param("voidReason") String voidReason);


    List<AssuranceBusinessDataReport> listApproval(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 根据报告文号统计报告
     *
     * @param reportNo
     * @return
     */
    Integer selectCountByReportNo(@Param("reportNo") String reportNo,@Param("businessId") Long businessId);

    /**
     * 匹配审计年度、报备类型、客户名称（被审验单位名称）和客户营业执照
     *
     * @param auditYear
     * @param reportType
     * @param customerName
     * @param customerBusinessLicense
     * @return
     */
    Integer matchConditionalData(@Param("auditYear") String auditYear, @Param("reportType") String reportType, @Param("customerName") String customerName, @Param("customerBusinessLicense") String customerBusinessLicense,@Param("businessId") Long businessId);

    /**
     * 根据防伪编码获取鉴证业务数据报告
     *
     * @param antiCounterfeitingCoding
     * @return
     */
    List<AssuranceBusinessDataReport> getAssuranceBusinessDataReport(@Param("antiCounterfeitingCoding") String antiCounterfeitingCoding);

    /**
     * 获取每个事务所得不同报备类型的数据
     *
     * @param query
     * @return
     */
    List<HashMap<String, Object>> getAssuranceNumByType(HashMap<String, Object> query);

    /**
     * 获取每个会计师的不同报备类型的数据
     *
     * @param query
     * @return
     */
    List<HashMap<String, Object>> getRegisterNumByType(HashMap<String, Object> query);

    /**
     * 获取每个事务所得不同审计意见类型的数据
     *
     * @param query
     * @return
     */
    List<HashMap<String, Object>> getAssuranceNumByOpinion(HashMap<String, Object> query);

    /**
     * 获取每个会计师的不同审计意见类型的数据
     *
     * @param query
     * @return
     */
    List<HashMap<String, Object>> getRegisterNumByOpinion(HashMap<String, Object> query);

    /**
     * 获取每个事务所得不同验资业务的数据
     *
     * @param query
     * @return
     */
    List<HashMap<String, Object>> getAssuranceNumBySecurities(HashMap<String, Object> query);

    /**
     * 获取每个会计师的不同验资业务的数据
     *
     * @param query
     * @return
     */
    List<HashMap<String, Object>> getRegisterNumBySecurities(HashMap<String, Object> query);

    /**
     * 根据业务id修改防伪编码
     *
     * @param businessId
     * @param antiCode
     */
    void updateAntiCodeByBusinessId(@Param("businessId") Long businessId, @Param("antiCode") String antiCode);

    /**
     * 根据条件查询业务报告
     *
     * @param  assuranceBusinessDataReport
     */
    List<AssuranceBusinessDataReport> selectReportByOfficeId( AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 根据条件查询业务报告与业务员
     *
     * @param assuranceBusinessDataReport
     */
    List<AssuranceBusinessDataReport> selectReportAndRegisteres( AssuranceBusinessDataReport assuranceBusinessDataReport);



    /**
     * 根据事务所编号查询报告
     *
     * @param assuranceBusinessDataReport
     */
    List<AssuranceBusinessDataReport> selectReportByOfficeIdAndRegistered( AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 根据事务所编号列表查询报告
     *
     * @param assuranceBusinessDataReport
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportByOfficeIdList( AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 根据officeId获取草稿报告列表
     *
     * @param officeId
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportDraftByOfficeId(@Param("officeId") Long officeId);

    /**
     * 根据officeId列表获取草稿报告列表
     *
     * @param list
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportDraftByOfficeIdList(@Param("list") List<String> list);

    /**
     * 查询草稿箱列表
     * @param assuranceBusinessDataReport
     * @return
     */
    List<AssuranceBusinessDataReport> selectReportDraftList(AssuranceBusinessDataReport assuranceBusinessDataReport);

    /**
     * 审核鉴证业务数据
     *
     * @param report 鉴证业务数据报告
     * @author wph 20200921
     */
    int auditImportReport(AssuranceBusinessDataReport report);

    /**
     * 检查报备编码
     * @param reportCode
     * @return
     */
    Integer checkReportCode(@Param("reportCode") String reportCode);

    /**
     * 根据报告文号查询数据
     * @param reportNo
     * @return
     */
    AssuranceBusinessDataReport selectReportByReportNo(@Param("reportNo") String reportNo);

    /**
     * 根据客户获取报告的信息与事务所，注册师
     * @return
     */
    List<HashMap<String,Object>> selectCustomerReportData(HashMap<String,Object> query);

    /**
     * 更好事务所报表统计 -- 获取有更换事务所审计单位
     * @param query
     * @return
     */
    List<HashMap<String,Object>> selectOfficeDataByCustomer(HashMap<String,Object> query);

    /**
     * 获取该审计单位关联过的事务所信息
     * @param query
     * @return
     */
    List<HashMap<String,Object>>  selectOfficeCustomerData(HashMap<String,Object> query);

    /**
     * 根据注册师获取报告的信息与事务所
     * @return
     */
    List<HashMap<String,Object>> selectRegisterReportData(HashMap<String,Object> query);

    /**
     * 获取申请财政退回数据数量
     * @return
     */
    List<AssuranceBusinessDataReport> selectApprovalReportCount(AssuranceBusinessDataReport report);

    /**
     * 获取需审核事务所待审核业务数据数量
     * @return
     */
    Integer selectApprovalOfficeReportCount(@Param("report") AssuranceBusinessDataReport report ,@Param("longs") List<Long> longs);
    /**
     * 获取需审核事务所待数量
     * @return
     */
    Integer selectApprovalOfficeCount(@Param("longs") List<Long> longs);


    /**
     * 获取事务所申请修改联系人数量
     * @return
     */
    Integer selectApprovalOfficePhoneCount(@Param("longs") List<Long> longs);

    List<HashMap<String,Object>> selectAntiCodePlural();

}
